
"""
题目：https://leetcode-cn.com/problems/longest-increasing-subsequence/
    给你一个整数数组 nums ，找到其中最长严格递增子序列的长度。
    子序列是由数组派生而来的序列，删除（或不删除）数组中的元素而不改变其余元素的顺序。例如，[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
    示例 1：
    输入：nums = [10,9,2,5,3,7,101,18]
    输出：4
    解释：最长递增子序列是 [2,3,7,101]，因此长度为 4 。
思路：动态规划方法。设置dp = [1,2,...,n],其中dp[i]表示以i结尾的最长样额递增子序列的长度，在(0,i)之间任取一个元素索引j，则状态转移方程dp[i] = dp[j] + 1,直到最后
    算出一个dp序列，取最大值即可

时间复杂度：O(n^2)
空间复杂度：O(n)
"""


class Solution:
    def lengthOfLIS(self, nums: List[int]) -> int:
        if not nums:
            return 0
        n = len(nums)
        dp = [1] * n
        for i in range(n):
            for j in range(i):
                if nums[i] > nums[j]:
                    dp[i] = max(dp[i],dp[j] + 1)
        return max(dp)
            